home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <string.h>
- #include <dirent.h>
- #include <stdlib.h>
- #include <sys/types.h>
- #include <unistd.h>
-
- typedef struct dir_node
- {
- char name[256];
- struct dir_node *next;
- }_dir_node;
-
- typedef struct file_node
- {
- char name[256];
- struct file_node *next;
- }_file_node;
-
- struct dir_node *dir_ll = NULL;
- struct file_node *file_ll = NULL;
-
- void add_dir(char *dir_to_add)
- {
- struct dir_node *new_node, *cur_node = dir_ll;
-
- new_node = (struct dir_node*)calloc(sizeof(struct dir_node),1);
- sprintf(new_node->name,"%s",dir_to_add);
- new_node->next = NULL;
-
- if(cur_node == NULL)
- {
- dir_ll = new_node;
- return;
- }
- while(cur_node->next)
- cur_node = cur_node->next;
- cur_node->next = new_node;
- }
-
- void add_file(char *file_to_add)
- {
- struct file_node *new_node, *cur_node = file_ll;
- char *str_ptr;
- int i,length = strlen(file_to_add);
-
- for(i=length-1;i>0;i--)
- {
- if(file_to_add[i] == '.')
- {
- str_ptr = &(file_to_add[i]);
- if(!strcmp(str_ptr,".html"))
- break;
- else
- return;
- }
- }
- if(i<0||i==0)
- return;
-
- new_node = (struct file_node*)calloc(sizeof(struct file_node),1);
- sprintf(new_node->name,"%s",file_to_add);
- new_node->next = NULL;
-
- if(cur_node == NULL)
- {
- file_ll = new_node;
- return;
- }
- while(cur_node->next)
- cur_node = cur_node->next;
- cur_node->next = new_node;
- }
-
- void split_dir(char *dir_name)
- {
- DIR *base_dir, *test_dir;
- struct dirent *entry;
- char *filename,complete_path[128];
-
- if(!dir_name || !*dir_name)
- return;
- if(!(base_dir = opendir(dir_name)))
- return;
- while(entry = readdir(base_dir))
- {
- filename = entry->d_name;
- sprintf(complete_path,"%s/%s",dir_name,filename);
- if(!strcmp(".",filename)||!strcmp("..",filename))
- continue;
-
- test_dir = opendir(complete_path);
- if(test_dir)
- {
- add_dir(complete_path);
- closedir(test_dir);
- }
- else
- {
- add_file(complete_path);
- }
- }
- closedir(base_dir);
- }
-
-
- void main(int argc, char* argv[])
- {
- struct dirent *dir_entry,*test_entry;
- DIR *base_dir,*test_dir;
- struct dir_node *dir_ent;
- struct file_node *file_ent;
- char string[256];
-
- if(!(base_dir = opendir("/home2")))
- return;
- while(dir_entry = readdir(base_dir))
- {
- sprintf(string,"/home2/%s/my_html",dir_entry->d_name);
- if(test_dir = opendir(string))
- {
- split_dir(string);
- closedir(test_dir);
- }
-
- }
- closedir(base_dir);
-
- while(dir_ll)
- {
- dir_ent = dir_ll;
- dir_ll = dir_ll->next;
- split_dir(dir_ent->name);
- free(dir_ent);
- }
-
- while(file_ll)
- {
- file_ent = file_ll;
- printf("%s\n",file_ent->name);
- file_ll = file_ll->next;
- free(file_ent);
- }
- }
-